По заданной
перестановке p найдите ей обратную p-1.
Вход. В первой строке записан порядок n (0 < n ≤
20000) перестановки p. Во второй
строке записана сама перестановка p.
Выход. Выведите искомую перестановку p-1.
Пример
входа |
Пример
выхода |
3 2 3 1 |
3 1 2 |
комбинаторика
- перестановки
Пусть p – заданная
перестановка. Ее применение означает перенос элемента из позиции i в позицию p[i], то есть происходит преобразование i ® p[i]. Обратной для
p будет такая перестановка pi, для которой имеет место обратное преобразование
p[i] ® i. То есть в
массиве pi на p[i]-ом месте должно стоять
число i (pi[p[i]] = i).
Пример
Изобразим прямую p = и обратную p-1 = перестановки. В
обратной перестановке ребра ориентированы в другую сторону.
Массив p хранит входную перестановку, массив pi хранит
обратную.
#define MAX 20010
int p[MAX], pi[MAX];
Читаем входную перестановку.
scanf("%d",&n);
for(i = 1; i <= n; i++)
scanf("%d",&p[i]);
Вычисляем обратную перестановку.
for(i = 1; i <= n; i++)
pi[p[i]] = i;
Выводим обратную перестановку.
for(i = 1; i <= n; i++)
printf("%d
",pi[i]);
printf("\n");
Список p
хранит входную перестановку, список pi хранит обратную. Читаем входные
данные.
n = int(input())
p = [0] + list(map(int, input().split()))
pi = [0] * (n + 1)
Вычисляем
обратную перестановку.
for i in range(1, n + 1):
pi[p[i]] = i
Выводим обратную
перестановку.
for i in range(1, n + 1):
print(pi[i], end=" ")
print()